package com.zhangshanfeng.stream;

import java.util.ArrayList;
import java.util.function.Consumer;
import java.util.stream.Stream;


public class StreamDemo02 {
    public static void main(String[] args) {

        ArrayList<String> list = new ArrayList<String>();

        list.add("林青霞");
        list.add("张曼玉");
        list.add("王祖贤");
        list.add("柳岩");
        list.add("张敏");
        list.add("张无忌");
        list.add("张无忌");

        //需求1：取前4个数据组成一个流
        Stream<String> limit = list.stream().limit(4);
        //需求2：跳过2个数据组成一个流
        Stream<String> skip = list.stream().skip(2);
        //需求3：合并需求1和需求2得到的流，并把结果在控制台输出
        //Stream.concat(limit,skip).forEach(s-> System.out.println(s));
        //需求4：合并需求1和需求2得到的流，并把结果在控制台输出，要求字符串元素不能重复
        Stream.concat(limit,skip).distinct().forEach(s-> System.out.println(s));


        //  void forEach(Consumer action)：对此流的每个元素执行操作
        //  Consumer接口中的方法void accept(T t)：对给定的参数执行此操作
        //在forEach方法的底层,会循环获取到流中的每一个数据.
        //并循环调用accept方法,并把每一个数据传递给accept方法
        //s就依次表示了流中的每一个数据.
        //所以,我们只要在accept方法中,写上处理的业务逻辑就可以了.

        list.stream().forEach(new Consumer<String>() {
            @Override
            public void accept(String s) {
                System.out.println(s);
            }
        });





    }
}
